# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.757.13.10 -> 1.757.13.11 # include/asm-generic/xor.h 1.2 -> 1.3 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/11/14 davidm@tiger.hpl.hp.com 1.757.29.8 # ia64: Make it easier to set a breakpoint in the Ski simulator right before # starting the kernel (based on patch by Peter Chubb). # -------------------------------------------- # 02/11/14 bjorn_helgaas@hp.com 1.757.29.9 # ia64: Make mremap() work properly when returning "negative" addresses. # Based on patch by Matt Chapman, 2.5 fix by David Mosberger. # -------------------------------------------- # 02/11/15 vandrove@vc.cvut.cz 1.757.26.11 # [PATCH] Fix lcall DoS # # Hi, # your original code just behaved as my old code: run modprobe successfully, # and then die. Problem is that copy of eflags on stack is totally unimportant # to us: current value in eflags is what matters. So this is minimal # patch which works here: NT, DF and TF are now cleared only for kernel, # and when we return back from lcall, userspace has its old values. # # Optimization left to readed is creating SAVE_ALL_NOCLD, and using this # one in lcall7 and lcall27. # # With patch below my machine survived test. Unfortunately I do not # have patched kernel with linux-abi to test whether lcall7 still works # correctly. # Best regards, # Petr Vandrovec # vandrove@vc.cvut.cz # -------------------------------------------- # 02/11/15 jfs.adm@hostme.bitkeeper.com 1.757.10.5 # Merge bk://linux.bkbits.net/linux-2.4 # into hostme.bitkeeper.com:/ua/repos/j/jfs/linux-2.4 # -------------------------------------------- # 02/11/15 agrover@groveronline.com 1.757.15.17 # ACPI: fix debug print levels, and use down() instead of down_interruptible(), # and some whitespace. # -------------------------------------------- # 02/11/15 agrover@groveronline.com 1.757.15.18 # ACPI: Interpreter fixes # Fixed memory leak in method argument resolution # Fixed Index() operator to work properly with a target operand # Fixed attempted double delete in the Index() code # Code size improvements # Improved debug/error messages and levels # Fixed a problem with premature deletion of a buffer object # -------------------------------------------- # 02/11/15 jsm@udlkern.fc.hp.com 1.757.29.10 # ia64: Use virtual mem map automatically if >1GB gap found # # Enclosed is a patch for 2.4 that is similar to what is going out with Red # Hat AS for ia64. This makes the virtual mem map support "automatic", i.e. # it will use a virtual mem map if CONFIG_DISCONTIGMEM is not defined and a # gap of greater than 1 GB is found in the physical memory layout. # -------------------------------------------- # 02/11/17 linux-bt.adm@hostme.bitkeeper.com 1.762.1.1 # Merge bk://linux.bkbits.net/linux-2.4 # into hostme.bitkeeper.com:/ua/repos/l/linux-bt/bt-2.4 # -------------------------------------------- # 02/11/17 linux-bt.adm@hostme.bitkeeper.com 1.766 # Merge hostme.bitkeeper.com:/ua/repos/l/linux-bt/bt-2.4 # into hostme.bitkeeper.com:/ua/repos/l/linux-bt/marcel-2.4 # -------------------------------------------- # 02/11/18 bunk@fs.tum.de 1.757.26.12 # [PATCH] Fiz Intermezzo compilation # # -------------------------------------------- # 02/11/18 axboe@suse.de 1.757.26.13 # [PATCH] Fix SCSI I/O performance problems introduced in early 2.4.20 # # Something isn't quite making sense. If we go over every single instance # of checking ->highmem_io, they all look sane (ie checking on non-highmem # setup must yield 0). So that part looks good. # # However, I think a typo snuck in there, in exactly the spot you pasted # above. Could you try 2.4.20-rc2 with this patch applied? # # ===== drivers/scsi/scsi_merge.c 1.9 vs edited ===== # -------------------------------------------- # 02/11/18 trond.myklebust@fys.uio.no 1.757.26.14 # [PATCH] Fix NFS client problem # # I thought I had sent this patch to you, but it may just have gotten # lost in the mad rush to finish the 2.5 features. I'm still waiting for # confirmation from Jens that the patch below fixes the problem # (although I'm pretty sure: it's been in 2.5.x for some time) but I # wanted to notify you. # # Problem is due to the change to using 'struct xdr_buf'. The macro # req->rlen does not quite translate into the received buffer length, so # the code that tests for whether or not we have a buffer overflow # fails. # # Cheers, # Trond # -------------------------------------------- # 02/11/18 shaggy@shaggy.austin.ibm.com 1.757.1.5 # Merge shaggy.austin.ibm.com:/home/shaggy/bk/jfs-2.4 # into shaggy.austin.ibm.com:/shaggy/bk/perf-2.4 # -------------------------------------------- # 02/11/18 marcelo@freak.distro.conectiva 1.757.26.15 # Changed EXTRAVERSION to -rc3 # -------------------------------------------- # 02/11/18 marcel@holtmann.org 1.767 # [Bluetooth] The function l2cap_do_connect() should be static # # This patch replaces l2cap_connect() with l2cap_do_connect() and # declares it static. # -------------------------------------------- # 02/11/18 marcel@holtmann.org 1.768 # [Bluetooth] Add BCSP TXCRC option # # This patch adds the config and help entries for the TXCRC option # of the BCSP driver. # -------------------------------------------- # 02/11/18 bjorn_helgaas@hp.com 1.757.13.11 # Adopt 2.5 generic xor.h (typo and prefetch fixes). # -------------------------------------------- # diff -Nru a/include/asm-generic/xor.h b/include/asm-generic/xor.h --- a/include/asm-generic/xor.h Wed Oct 8 09:08:07 2003 +++ b/include/asm-generic/xor.h Wed Oct 8 09:08:07 2003 @@ -123,7 +123,7 @@ d5 ^= p2[5]; d6 ^= p2[6]; d7 ^= p2[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -168,7 +168,7 @@ d5 ^= p3[5]; d6 ^= p3[6]; d7 ^= p3[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -222,7 +222,7 @@ d5 ^= p4[5]; d6 ^= p4[6]; d7 ^= p4[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -285,7 +285,7 @@ d5 ^= p5[5]; d6 ^= p5[6]; d7 ^= p5[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -304,13 +304,14 @@ static void xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); do { prefetchw(p1+8); prefetch(p2+8); + once_more: p1[0] ^= p2[0]; p1[1] ^= p2[1]; p1[2] ^= p2[2]; @@ -322,13 +323,15 @@ p1 += 8; p2 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); prefetch(p3); @@ -337,6 +340,7 @@ prefetchw(p1+8); prefetch(p2+8); prefetch(p3+8); + once_more: p1[0] ^= p2[0] ^ p3[0]; p1[1] ^= p2[1] ^ p3[1]; p1[2] ^= p2[2] ^ p3[2]; @@ -349,13 +353,15 @@ p2 += 8; p3 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); @@ -367,7 +373,7 @@ prefetch(p2+8); prefetch(p3+8); prefetch(p4+8); - + once_more: p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; @@ -381,13 +387,15 @@ p3 += 8; p4 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4, unsigned long *p5) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); @@ -401,7 +409,7 @@ prefetch(p3+8); prefetch(p4+8); prefetch(p5+8); - + once_more: p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; @@ -416,12 +424,14 @@ p4 += 8; p5 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); @@ -431,7 +441,7 @@ prefetchw(p1+8); prefetch(p2+8); - + once_more: d0 = p1[0]; /* Pull the stuff into registers */ d1 = p1[1]; /* ... in bursts, if possible. */ d2 = p1[2]; @@ -448,7 +458,7 @@ d5 ^= p2[5]; d6 ^= p2[6]; d7 ^= p2[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -459,13 +469,15 @@ p1 += 8; p2 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); @@ -477,7 +489,7 @@ prefetchw(p1+8); prefetch(p2+8); prefetch(p3+8); - + once_more: d0 = p1[0]; /* Pull the stuff into registers */ d1 = p1[1]; /* ... in bursts, if possible. */ d2 = p1[2]; @@ -502,7 +514,7 @@ d5 ^= p3[5]; d6 ^= p3[6]; d7 ^= p3[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -514,13 +526,15 @@ p2 += 8; p3 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); @@ -534,7 +548,7 @@ prefetch(p2+8); prefetch(p3+8); prefetch(p4+8); - + once_more: d0 = p1[0]; /* Pull the stuff into registers */ d1 = p1[1]; /* ... in bursts, if possible. */ d2 = p1[2]; @@ -567,7 +581,7 @@ d5 ^= p4[5]; d6 ^= p4[6]; d7 ^= p4[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -580,13 +594,15 @@ p3 += 8; p4 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static void xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, unsigned long *p3, unsigned long *p4, unsigned long *p5) { - long lines = bytes / (sizeof (long)) / 8; + long lines = bytes / (sizeof (long)) / 8 - 1; prefetchw(p1); prefetch(p2); @@ -602,7 +618,7 @@ prefetch(p3+8); prefetch(p4+8); prefetch(p5+8); - + once_more: d0 = p1[0]; /* Pull the stuff into registers */ d1 = p1[1]; /* ... in bursts, if possible. */ d2 = p1[2]; @@ -643,7 +659,7 @@ d5 ^= p5[5]; d6 ^= p5[6]; d7 ^= p5[7]; - p1[0] = d0; /* Store the result (in burts) */ + p1[0] = d0; /* Store the result (in bursts) */ p1[1] = d1; p1[2] = d2; p1[3] = d3; @@ -657,6 +673,8 @@ p4 += 8; p5 += 8; } while (--lines > 0); + if (lines == 0) + goto once_more; } static struct xor_block_template xor_block_8regs = {